package com.mayi.zds_comment.utils;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 	controller接受前端传来的参数时 符合自定义格式的日期字符串转java.util.Date类型转换处理器
 * 	自定义日期格式只需配置partten属性，例如：'yyyy-MM-dd HH:mm:ss'
 * @author Administrator
 *
 */
@Component
public class StringToDateConverter implements Converter<String, Date> {
		/**
		 * FORMATS是一个list，规定了四种日期格式：
		 * [0] "yyyy-MM"
		 * [1] "yyyy-MM-dd"
		 * [2] "yyyy-MM-dd hh:mm"
		 * [3] "yyyy-MM-dd hh:mm:ss"
		 * 可配合静态方法 Date parseDate(String dateStr, String format);使用
		 * @Author zhong
		 * @Date 2019/12/02 15:59:00
		 **/
		public static final List<String> FORMATS = new ArrayList<>(4);

		static{
			FORMATS.add("yyyy-MM");
			FORMATS.add("yyyy-MM-dd");
			FORMATS.add("yyyy-MM-dd hh:mm");
			FORMATS.add("yyyy-MM-dd hh:mm:ss");
		}

		@Override
		public Date convert(String source) {
			String value = source.trim();
			if ("".equals(value)) {
				return null;
			}
			if(source.matches("^\\d{4}-\\d{1,2}$")){
				return parseDate(source, FORMATS.get(0));
			}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
				return parseDate(source, FORMATS.get(1));
			}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
				return parseDate(source, FORMATS.get(2));
			}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
				return parseDate(source, FORMATS.get(3));
			}else {
				throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
			}
		}

		/**
		 * 格式化日期
		 * @param dateStr String 字符型日期
		 * @param format String 格式
		 * @return Date 日期
		 */
		public  Date parseDate(String dateStr, String format) {
			Date date=null;
			try {
				DateFormat dateFormat = new SimpleDateFormat(format);
				date = dateFormat.parse(dateStr);
			} catch (Exception e) {

			}
			return date;
		}

}
